package com.yt.product.service;

import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.BeanUtils;
import javax.annotation.Resource;
import java.util.Date;
import com.yt.product.common.config.YmlConfig;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yt.product.mapper.SupplierInfoMapper;
import com.yt.product.models.service.ISupplierInfoService;
import com.yt.product.models.bo.SupplierInfoSaveBO;
import com.yt.product.models.dto.SupplierInfoDTO;
import com.yt.common.exception.BusinessException;
import com.yt.common.enums.CodeEnum;

@DubboService
public class SupplierInfoServiceImpl extends ServiceImpl<SupplierInfoMapper, SupplierInfoDTO> implements ISupplierInfoService {

    @Resource
    private YmlConfig ymlConfig;

    @Override
    public boolean add(SupplierInfoSaveBO saveBO) {
        // 1. 参数校验
        validateSupplierSaveBO(saveBO);

        // 2. BO转换为DTO
        SupplierInfoDTO dto = new SupplierInfoDTO();
        BeanUtils.copyProperties(saveBO, dto);

        // 3. 设置默认值
        setSupplierDefaultValues(dto);

        // 4. 生成主键ID
        Long id = ymlConfig.getPkId();
        dto.setId(id);

        // 5. 插入数据库
        return this.insert(dto);
    }

    /**
     * 供应商信息参数校验
     */
    private void validateSupplierSaveBO(SupplierInfoSaveBO saveBO) {
        if (saveBO == null) {
            throw new BusinessException(CodeEnum.FAIL_100002.getCode(), "供应商信息不能为空");
        }
        if (saveBO.getSupplierName() == null || saveBO.getSupplierName().trim().isEmpty()) {
            throw new BusinessException(CodeEnum.FAIL_100002.getCode(), "供应商名称不能为空");
        }
        if (saveBO.getPhone() == null || saveBO.getPhone().trim().isEmpty()) {
            throw new BusinessException(CodeEnum.FAIL_100002.getCode(), "供应商联系电话不能为空");
        }
    }

    /**
     * 设置供应商信息默认值
     */
    private void setSupplierDefaultValues(SupplierInfoDTO dto) {
        // 乐观锁版本号默认0
        if (dto.getRevision() == null) {
            dto.setRevision(0);
        }
        // 状态默认正常合作（1）
        if (dto.getStatus() == null) {
            dto.setStatus(1);
        }
        // 地址默认空字符串（解决默认值为空的问题）
        if (dto.getAddress() == null) {
            dto.setAddress("");
        }
        // 创建时间和更新时间默认当前时间
        Date now = new Date();
        dto.setCreateTime(dto.getCreateTime() != null ? dto.getCreateTime() : now);
        dto.setUpdateTime(dto.getUpdateTime() != null ? dto.getUpdateTime() : now);
    }
}